#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include<fcntl.h>
#include <string.h>
#include <sys/wait.h>
#include<sys/types.h>
#define ONE 1
#define TWO (1<<1)
#define THREE (1<<2)
#define FOUR (1<<3)
#define FIVE (1<<4)
// 使用位图传参的示例
void Print(int flag)
{
    if(flag & ONE)
    {
        printf("ONE\n");
    }
    if(flag & TWO)
    {
        printf("TWO\n");
    }
    if(flag & THREE)
    {
        printf("THREE\n");
    }
    if(flag & FOUR)
    {
        printf("FOUR\n");
    }
    if(flag & FIVE)
    {
        printf("FIVE\n");
    }
}
int main()
{
    umask(0);// 设置文件权限掩码为0
    //int fd = open("log.txt", O_WRONLY | O_CREAT |O_TRUNC,0666); // 此时写入的时候如果文件存在就会清空文件
    int fd = open("log.txt", O_WRONLY | O_CREAT |O_APPEND,0666); // O_APPEND是追加写入
    int fd2 = open("log.txt", O_WRONLY | O_CREAT |O_APPEND,0666); 
    int fd3 = open("log.txt", O_WRONLY | O_CREAT |O_APPEND,0666); 
    int fd4 = open("log.txt", O_WRONLY | O_CREAT |O_APPEND,0666); 


    if(fd == -1)
    {
        perror("open");
        return 1;
    }
    // 写入文件
    const char* str = "Hello, Linux";
    int cnt = 5;
    printf("fd = %d\n", fd);
    printf("fd2 = %d\n", fd2);
    printf("fd3 = %d\n", fd3);
    printf("fd4 = %d\n", fd4);
    printf("stdin:%d\n",stdin->_fileno);
    printf("stdout:%d\n",stdout->_fileno);
    printf("stderr:%d\n",stderr->_fileno);
    while(cnt--)
    {
        int n = write(fd, str, strlen(str)); // 返回值是字节
        printf("writen %d bytes\n", n);
    }
    return 0;
}



// int main()
// {
//     Print(ONE | THREE | FOUR | TWO);
//     return 0;
// }





// int main()
// {

//     // 读取
//     char buf[256];
//     scanf("%s", buf);
//     fgets(buf,sizeof(buf), stdin);
//     fread(buf,sizoef(buf),1,stdin);
//     fscanf(stdin, "%s", buf);


//     // 打印
//     printf("Hello, World!\n");
//     fputs("Hello, World!\n", stdout);
//     const char* str = "Hello, World!\n";
//     fwrite(str, strlen(str), 1, stdout);
//     fprintf(stdout,"Hello, World!\n");
//     return 0;
// }



// int main()
// {
//     FILE *fp = fopen("test.txt", "r");

//     printf("pid = %d\n", getpid());

//     char buf[256];
//     getcwd(buf, sizeof(buf));
//     printf("Current working directory: %s\n", buf);

//     if(fp == NULL)
//     {
//         perror("fopen");
//         return 1;
//     }

//     // 写入文件
//     // fputs("Hello, World!\n", fp);
//     // int cnt = 5;
//     // const char* str = "Hello, Linux\n";
//     // while(cnt--)
//     // {
//     //     int n = fwrite(str, strlen(str), 1, fp);
//     //     printf("writen %d blocks\n", n);
//     // }

//     // 读取文件
//     char buf2[256];
//     while(fgets(buf2, sizeof(buf2), fp) )
//     {
//         printf("Read: %s", buf2);
//     }
    
    

//     fflush(fp);

//     //sleep(20);
//     fclose(fp);
//     return 0;
// }